﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Sigecov.Models;
using System.Linq;
namespace Sigecov.Formularios
{
    public partial class FrmFornecedor : Sigecov.Formularios.FrmBase
    {
        public FrmFornecedor()
        {
            InitializeComponent();
        }

        private void FrmFornecedor_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dsSigecov.Paises' table. You can move, or remove it, as needed.
            this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
            this.AcaoIncluir();
            if (_tipoOperacao == "INCLUIR")
            {
                this.lblTituloAcao.Text = "Cadastrar Fornecedor";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                Ferramenta.ResetarControles(this.Controls);
                this.AcaoIncluir();
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Alterar Fornecedor";
                this.AcaoAlterar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Fornecedore fornecedor = DB.Fornecedores.Find(_idAcao);
                    txtBairro.Text = fornecedor.forBairro;
                    txtCargoContato.Text = fornecedor.forCargoContato;
                    txtComplemento.Text = fornecedor.forComplemento;
                    txtContato.Text = fornecedor.forContato;
                    txtEmpresa.Text = fornecedor.forEmpresa;
                    txtLogradouro.Text = fornecedor.forLogradouro;
                    txtNumero.Text = fornecedor.forNumero.ToString();
                    txtHomePage.Text = fornecedor.forHomePage;
                    txtCep.Text = fornecedor.forCep;
                    mtbFax.Text = fornecedor.forFax;
                    mtbTelefone.Text = fornecedor.forTelefone;
                    if (fornecedor.forStatus == "A")
                        cbxStatus.SelectedItem = "Ativo";
                    else
                        cbxStatus.SelectedItem = "Inativo";
                    cbxPais.SelectedValue = fornecedor.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = fornecedor.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = fornecedor.Cidade.cidId;

                    cbxTipoLogradouro.SelectedItem = fornecedor.forTipoLogradouro;
                }
            }
            else if (_tipoOperacao == "DELETAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Deletar Fornecedor";
                this.AcaoDeletar();
                using (SigecovContext DB = new SigecovContext())
                {
                    FrmFornecedor formulario = new FrmFornecedor();
                    Fornecedore fornecedor = DB.Fornecedores.Find(_idAcao);
                    txtBairro.Text = fornecedor.forBairro;
                    txtCargoContato.Text = fornecedor.forCargoContato;
                    txtComplemento.Text = fornecedor.forComplemento;
                    txtContato.Text = fornecedor.forContato;
                    txtEmpresa.Text = fornecedor.forEmpresa;
                    txtLogradouro.Text = fornecedor.forLogradouro;
                    txtNumero.Text = fornecedor.forNumero.ToString();
                    txtHomePage.Text = fornecedor.forHomePage;
                    txtCep.Text = fornecedor.forCep;
                    mtbFax.Text = fornecedor.forFax;
                    mtbTelefone.Text = fornecedor.forTelefone;
                    if (fornecedor.forStatus == "A")
                        cbxStatus.SelectedItem = "Ativo";
                    else
                        cbxStatus.SelectedItem = "Inativo";
                    cbxPais.SelectedValue = fornecedor.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = fornecedor.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = fornecedor.Cidade.cidId;

                    cbxTipoLogradouro.SelectedItem = fornecedor.forTipoLogradouro;
                    Ferramenta.DesativarControles(this.Controls);
                }
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "INCLUIR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Fornecedore fornecedor = new Fornecedore();
                        if (!
                           ((string.IsNullOrWhiteSpace(txtBairro.Text))
                           || (string.IsNullOrWhiteSpace(txtCargoContato.Text))
                           || (string.IsNullOrWhiteSpace(txtContato.Text))
                           || (string.IsNullOrWhiteSpace(txtEmpresa.Text))
                           || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                           || (string.IsNullOrWhiteSpace(txtNumero.Text))
                           || (string.IsNullOrWhiteSpace(txtCep.Text)))
                        )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                var itens = DB.Fornecedores.Where(f => f.forEmpresa == txtEmpresa.Text);
                                if (itens.Count() == 0)
                                {
                                    fornecedor.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                    fornecedor.forBairro = txtBairro.Text;
                                    fornecedor.forCargoContato = txtCargoContato.Text;
                                    fornecedor.forCep = txtCep.Text;
                                    fornecedor.forComplemento = txtComplemento.Text;
                                    fornecedor.forContato = txtContato.Text;
                                    fornecedor.forEmpresa = txtEmpresa.Text;
                                    fornecedor.forFax = mtbFax.Text;
                                    fornecedor.forHomePage = txtHomePage.Text;
                                    fornecedor.forLogradouro = txtLogradouro.Text;
                                    fornecedor.forNumero = Convert.ToInt32(txtNumero.Text);
                                    fornecedor.forTelefone = mtbTelefone.Text;
                                    fornecedor.forTipoLogradouro = cbxTipoLogradouro.Text;
                                    if (cbxStatus.Text == "Ativo")
                                        fornecedor.forStatus = "A";
                                    else
                                        fornecedor.forStatus = "I";
                                    fornecedor.Cadastrar(fornecedor, DB);
                                    MessageBox.Show("Fornecedor cadastrado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Ferramenta.ResetarControles(this.Controls);
                                    txtEmpresa.Focus();
                                }
                                else
                                {
                                    MessageBox.Show("Esse fornecedor já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    txtEmpresa.Clear();
                                    txtEmpresa.Focus();
                                }
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtEmpresa.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao inserir o fornecedor!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Fornecedore fornecedor = new Fornecedore();
                        if (!
                           ((string.IsNullOrWhiteSpace(txtBairro.Text))
                           || (string.IsNullOrWhiteSpace(txtCargoContato.Text))
                           || (string.IsNullOrWhiteSpace(txtContato.Text))
                           || (string.IsNullOrWhiteSpace(txtEmpresa.Text))
                           || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                           || (string.IsNullOrWhiteSpace(txtNumero.Text))
                           || (string.IsNullOrWhiteSpace(txtCep.Text)))
                        )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                fornecedor = DB.Fornecedores.Find(_idAcao);
                                fornecedor.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                fornecedor.forBairro = txtBairro.Text;
                                fornecedor.forCargoContato = txtCargoContato.Text;
                                fornecedor.forCep = txtCep.Text;
                                fornecedor.forComplemento = txtComplemento.Text;
                                fornecedor.forContato = txtContato.Text;
                                fornecedor.forEmpresa = txtEmpresa.Text;
                                fornecedor.forFax = mtbFax.Text;
                                fornecedor.forHomePage = txtHomePage.Text;
                                fornecedor.forLogradouro = txtLogradouro.Text;
                                fornecedor.forNumero = Convert.ToInt32(txtNumero.Text);
                                fornecedor.forTelefone = mtbTelefone.Text;
                                fornecedor.forTipoLogradouro = cbxTipoLogradouro.Text;
                                if (cbxStatus.Text == "Ativo")
                                    fornecedor.forStatus = "A";
                                else
                                    fornecedor.forStatus = "I";

                                fornecedor.Alterar(fornecedor, DB);
                                MessageBox.Show("Transportadora alterada com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtEmpresa.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao alterar a transportadora!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }

        private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "DELETAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        DialogResult confirmar = MessageBox.Show("Deseja deletar o fornecedor "+txtEmpresa.Text.ToUpper()+"?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (confirmar.ToString().ToUpper() == "YES")
                        {
                            Fornecedore fornecedor = new Fornecedore();
                            fornecedor = DB.Fornecedores.Find(_idAcao);
                            fornecedor.Deletar(fornecedor, DB);
                            MessageBox.Show("Fornecedor deletado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao deletar o fornecedor!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnDeletar.Focus();
                    }
                }
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cbxPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxEstado.DataSource = Estado.ListarEstado(Convert.ToInt32(cbxPais.SelectedValue));
            cbxEstado.DisplayMember = "estNome";
            cbxEstado.ValueMember = "estId";
        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Ferramenta.ResetarControles(this.Controls);
        }

        private void txtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbxPais.Text == "Brasil")
            {
                txtCep.MaxLength = 8;
                Ferramenta.SomenteNumero(e);
            }
            else
                txtCep.MaxLength = 10;
        }

        private void cbxEstado_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            cbxCidade.DataSource = Cidade.ListarCidade(Convert.ToInt32(cbxEstado.SelectedValue));
            cbxCidade.DisplayMember = "cidNome";
            cbxCidade.ValueMember = "cidId";
        }

        private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void btnPesquisarCep_Click(object sender, EventArgs e)
        {
            bool existeConexao = Ferramenta.VerificarConexaoInternet();
            bool enderecoEncontrado = false;
            bool problemaConexao = false;
            string mensagemConexao = "";
            if (existeConexao)
            {
                if (cbxPais.Text == "Brasil")
                {
                    Dictionary<string, string> endereco = Ferramenta.BuscarCep(txtCep.Text);

                    foreach (var item in endereco)
                    {
                        if (item.Key == "conexao")
                        {
                            mensagemConexao = item.Value;
                            problemaConexao = true;

                        }
                        if (item.Key == "logradouro")
                        {
                            if (item.Value == "")
                                enderecoEncontrado = false;
                            else
                                enderecoEncontrado = true;
                        }
                    }
                    if (!(problemaConexao))
                    {
                        if (enderecoEncontrado)
                        {
                            foreach (var item in endereco)
                            {
                                if (item.Key == "tipoLogradouro")
                                    cbxTipoLogradouro.SelectedItem = item.Value;
                                else if (item.Key == "logradouro")
                                    txtLogradouro.Text = item.Value;
                                else if (item.Key == "bairro")
                                    txtBairro.Text = item.Value;
                                else if (item.Key == "cidade")
                                {
                                    cbxCidade.Items.Add(item.Value);
                                    cbxCidade.SelectedItem = item.Value;
                                }
                                else
                                {
                                    cbxEstado.Text = item.Value;
                                    cbxEstado.SelectedItem = item.Value;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Endereço não encontrado com o cep informado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtCep.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show(mensagemConexao, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtCep.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("A busca de cep só funciona para os estados brasileiros!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCep.Focus();
                }
            }
            else
            {
                MessageBox.Show("Sem conexão com internet!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCep.Focus();
            }
        }
    }
}
